using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._CartographicRefinement
{
    /// <summary>
    /// <para>Calculate Bridge Offsets</para>
    /// <para>Calculates the offsets necessary to properly display bridges at a given location.</para>
    /// <para>计算在给定位置正确显示网桥所需的偏移量。</para>
    /// </summary>    
    [DisplayName("Calculate Bridge Offsets")]
    public class CalculateBridgeOffsets : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CalculateBridgeOffsets()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_bridge_features">
        /// <para>Input Bridge Features</para>
        /// <para>The feature layer that contains bridge features for which symbol offsets will be updated. Symbolize the bridge features layer with proper bridge features and enable attribute-driven symbology on it.</para>
        /// <para>包含将更新符号偏移的桥接要素的要素图层。使用适当的桥梁要素对桥梁要素图层进行符号化，并在其上启用属性驱动符号系统。</para>
        /// </param>
        /// <param name="_in_overpassing_features">
        /// <para>Overpassing Features</para>
        /// <para>The feature layer that contains the features overpassing the bridges.</para>
        /// <para>包含超越桥梁的要素的要素图层。</para>
        /// </param>
        /// <param name="_reference_scale">
        /// <para>Reference Scale</para>
        /// <para>The scale at which symbols appear at their intended size.</para>
        /// <para>符号按预期大小显示的比例。</para>
        /// </param>
        public CalculateBridgeOffsets(object _in_bridge_features, object _in_overpassing_features, long? _reference_scale)
        {
            this._in_bridge_features = _in_bridge_features;
            this._in_overpassing_features = _in_overpassing_features;
            this._reference_scale = _reference_scale;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Calculate Bridge Offsets";

        public override string CallName => "topographic.CalculateBridgeOffsets";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_bridge_features, _in_overpassing_features, _reference_scale, _search_distance, _expand.GetGPValue(), _offset, _min_length, _bridge_subtype, _overpassing_subtype, _updated_bridge_features];

        /// <summary>
        /// <para>Input Bridge Features</para>
        /// <para>The feature layer that contains bridge features for which symbol offsets will be updated. Symbolize the bridge features layer with proper bridge features and enable attribute-driven symbology on it.</para>
        /// <para>包含将更新符号偏移的桥接要素的要素图层。使用适当的桥梁要素对桥梁要素图层进行符号化，并在其上启用属性驱动符号系统。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Bridge Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_bridge_features { get; set; }


        /// <summary>
        /// <para>Overpassing Features</para>
        /// <para>The feature layer that contains the features overpassing the bridges.</para>
        /// <para>包含超越桥梁的要素的要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Overpassing Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_overpassing_features { get; set; }


        /// <summary>
        /// <para>Reference Scale</para>
        /// <para>The scale at which symbols appear at their intended size.</para>
        /// <para>符号按预期大小显示的比例。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reference Scale")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public long? _reference_scale { get; set; }


        /// <summary>
        /// <para>Search Distance</para>
        /// <para>The distance, calculated in map units, by which this tool will buffer point bridge features when identifying the overpassing features. This parameter is only available for point bridges. The default is 0 meters.</para>
        /// <para>以地图单位计算的距离，此工具在识别超车要素时将根据该距离缓冲点桥要素。此参数仅适用于点桥。默认值为 0 米。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Search Distance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _search_distance { get; set; } = "0 Meters";


        /// <summary>
        /// <para>Expand to Markers</para>
        /// <para><xdoc>
        ///   <para>Specifies whether marker layers on overpassing symbols will be included when analyzing widths.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Marker layers on overpassing symbols will be included when analyzing widths.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Marker layers on overpassing symbols will not be included. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在分析宽度时是否包括覆盖符号上的标记图层。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 分析宽度时，将包括覆盖符号上的标记图层。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不包括覆盖符号上的标记图层。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Expand to Markers")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _expand_value _expand { get; set; } = _expand_value._false;

        public enum _expand_value
        {
            /// <summary>
            /// <para>EXPAND</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXPAND")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_EXPAND</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_EXPAND")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Additional Offset</para>
        /// <para>An offset added to the bridge width. The default is 0 points.</para>
        /// <para>添加到桥宽的偏移量。默认值为 0 点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Additional Offset")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _offset { get; set; } = "0 Points";


        /// <summary>
        /// <para>Minimum Length</para>
        /// <para><xdoc>
        ///   <para>The minimum length of a line bridge. The default is 1.35 millimeters.</para>
        ///   <para>If the length of the bridge is less than the minimum length, it will be expanded to minimum length.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>线桥的最小长度。默认值为 1.35 毫米。</para>
        ///   <para>如果桥梁的长度小于最小长度，它将扩展到最小长度。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Length")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _min_length { get; set; } = "1.5 Millimeters";


        /// <summary>
        /// <para>Bridge Features Subtype</para>
        /// <para>The subtype of the feature class from the Input Bridge Features parameter that will be modified by this operation.</para>
        /// <para>此操作将修改输入桥接要素参数中要素类的子类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Bridge Features Subtype")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _bridge_subtype { get; set; } = null;


        /// <summary>
        /// <para>Overpassing Features Subtype</para>
        /// <para>The subtype of the feature class in the Overpassing Features parameter that will be used in this operation.</para>
        /// <para>将在此操作中使用的覆盖要素参数中要素类的子类型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Overpassing Features Subtype")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _overpassing_subtype { get; set; } = null;


        /// <summary>
        /// <para>Updated Bridge Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Bridge Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_bridge_features { get; set; }


        public CalculateBridgeOffsets SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}